package org.bbelovic.devel.exercises;


/**
 * Strategy interface for input line evaluation.
 * 
 * Implementations should evaluate new input line (in form of string tokens) and then decide
 * whether actual line will be replaced by new input line.
 */
public interface LineEvaluator {

    /**
     * Evaluates new input line.
     * 
     * Evaluates new input line and returns result based on input line evaluation. Result is either actual line
     * or new input line if evaluation result in replacing actual input line with new one.
     * 
     * @param input all input data needed for correct evaluation bundled in {@link LineEvaluatorInput}
     * @return output evaluation result bundled in {@link LineEvaluatorOutput}
     */
    public LineEvaluatorOutput evaluate(LineEvaluatorInput input);
}
